
///////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 2009, Perry L Miller IV
//  All rights reserved.
//  BSD License: http://www.opensource.org/licenses/bsd-license.html
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
//
//  Conditional compile configurations.
//
///////////////////////////////////////////////////////////////////////////////

#ifndef _USUL_DLL_CONFIG_H_
#define _USUL_DLL_CONFIG_H_


///////////////////////////////////////////////////////////////////////////////
//
//  Bring in a subset of the definition from windows.h
//
///////////////////////////////////////////////////////////////////////////////

#if 1
# ifdef _MSC_VER
#  ifndef NOMINMAX
#   define NOMINMAX
#  endif
#  ifndef WIN32_LEAN_AND_MEAN
#   define WIN32_LEAN_AND_MEAN
#  endif
# endif
#endif


///////////////////////////////////////////////////////////////////////////////
//
//  Defining this hides depreciated boost filesystem functions.
//  There's a compile error when defining this for older boost versions.
//  See: http://www.nabble.com/-filesystem--BOOST_FILESYSTEM_NO_DEPRECATED-td19183163.html
//  And: http://www.boost.org/doc/libs/1_38_0/libs/filesystem/doc/index.htm
//
///////////////////////////////////////////////////////////////////////////////

#if 0
#define BOOST_FILESYSTEM_NO_DEPRECATED
#endif


///////////////////////////////////////////////////////////////////////////////
//
//  Turn on/off a counter for all instances of Usul::Base::Ref::Careful.
//
///////////////////////////////////////////////////////////////////////////////

#if 1
#define USUL_USE_INSTANCE_COUNTER
#endif


///////////////////////////////////////////////////////////////////////////////
//
//  Turn on/off use of an instance-manager in Usul::Base::Ref::Careful.
//
///////////////////////////////////////////////////////////////////////////////

#if 1
#define USUL_USE_INSTANCE_MANAGER
#endif


///////////////////////////////////////////////////////////////////////////////
//
//  Turn on/off the use of Intel's TBB atomic classes for integer types.
//  If off a default implementation of Usul::Atomic::Integer will be used.
//
///////////////////////////////////////////////////////////////////////////////

#if 1
#define USUL_USE_TBB_ATOMIC_CLASS
#endif


///////////////////////////////////////////////////////////////////////////////
//
//  Configure the base class of Usul::Base::Referenced by enabling 
//  (with #if 1) one (and only one) of the following.
//
///////////////////////////////////////////////////////////////////////////////

#ifdef _DEBUG
#define USUL_BASE_REFERENCED_BASE_CLASS \
  Usul::Base::Ref::Careful
#define USUL_BASE_REFERENCED_CAREFUL
#endif

#ifndef _DEBUG
#define USUL_BASE_REFERENCED_BASE_CLASS \
  Usul::Base::Ref::MultiThreaded
#define USUL_BASE_REFERENCED_MULTI_THREADED
#endif

#if 0
#define USUL_BASE_REFERENCED_BASE_CLASS \
  Usul::Base::Ref::SingleThreaded
#define USUL_BASE_REFERENCED_SINGLE_THREADED
#endif


///////////////////////////////////////////////////////////////////////////////
//
//  Turn tracing on/off extra arguments for debugging circular references.
//
///////////////////////////////////////////////////////////////////////////////

#if 0
#ifndef USUL_TRACK_REFERENCES
#define USUL_TRACK_REFERENCES
#endif
#endif


///////////////////////////////////////////////////////////////////////////////
//
//  Turn on/off this profiling switch.
//
///////////////////////////////////////////////////////////////////////////////

#if 0
#ifndef USUL_USING_PROFILER
#define USUL_USING_PROFILER
#endif
#endif


///////////////////////////////////////////////////////////////////////////////
//
//  Turn tracing on/off everywhere with this switch.
//
///////////////////////////////////////////////////////////////////////////////

#if 0
#ifndef USUL_USE_TRACING
#define USUL_USE_TRACING
#endif
#endif


///////////////////////////////////////////////////////////////////////////////
//
//  Turn on/off instantiation of plugin manager singleton at startup.
//
///////////////////////////////////////////////////////////////////////////////

#if 1
#ifndef USUL_AUTO_CREATE_SINGLETON_PLUGIN_MANAGER
#define USUL_AUTO_CREATE_SINGLETON_PLUGIN_MANAGER
#endif
#endif


///////////////////////////////////////////////////////////////////////////////
//
//  Turn on/off deletion of plugin manager singleton at exit.
//
///////////////////////////////////////////////////////////////////////////////

#if 1
#ifndef USUL_AUTO_DELETE_SINGLETON_PLUGIN_MANAGER
#define USUL_AUTO_DELETE_SINGLETON_PLUGIN_MANAGER
#endif
#endif


///////////////////////////////////////////////////////////////////////////////
//
//  Turn on/off instantiation of document manager singleton at startup.
//
///////////////////////////////////////////////////////////////////////////////

#if 1
#ifndef USUL_AUTO_CREATE_SINGLETON_DOCUMENT_MANAGER
#define USUL_AUTO_CREATE_SINGLETON_DOCUMENT_MANAGER
#endif
#endif


///////////////////////////////////////////////////////////////////////////////
//
//  Turn on/off deletion of document manager singleton at exit.
//
///////////////////////////////////////////////////////////////////////////////

#if 1
#ifndef USUL_AUTO_CREATE_SINGLETON_DOCUMENT_MANAGER
#define USUL_AUTO_CREATE_SINGLETON_DOCUMENT_MANAGER
#endif
#endif


///////////////////////////////////////////////////////////////////////////////
//
//  Definitions to customize plugin file names.
//
///////////////////////////////////////////////////////////////////////////////

#ifndef USUL_PLUGIN_EXTENSION_RELEASE
#define USUL_PLUGIN_EXTENSION_RELEASE "plug"
#endif // USUL_PLUGIN_EXTENSION_RELEASE

#ifndef USUL_PLUGIN_EXTENSION_DEBUG
#define USUL_PLUGIN_EXTENSION_DEBUG "plugd"
#endif // USUL_PLUGIN_EXTENSION_DEBUG

#ifndef USUL_PLUGIN_POSTFIX_DEBUG
#define USUL_PLUGIN_POSTFIX_DEBUG ""
#endif // USUL_PLUGIN_POSTFIX_DEBUG


#endif // _USUL_DLL_CONFIG_H_
